package com.ruanruan.structure.graph;

/**
 * 图的基本操作接口
 */
public interface Graph {

    /**
     * 获取图的顶点个数
     * @return 图的顶点个数
     */
    int V();

    /**
     * 获取图的边的个数
     * @return 图的边的个数
     */
    int E();

    /**
     * 判断两点顶点是否相连
     * @param v 顶点1
     * @param w 顶点2
     * @return true相连,false不相连
     */
    boolean hasEdge(int v, int w);

    /**
     * 获取与v顶点相连的所有节点
     * @param v 顶点
     * @return 与顶点v连接的顶点集合
     */
    Iterable<Integer> adj(int v);

    /**
     * 获取顶点的度（顶点有多少个临边）
     * @param v 顶点
     * @return 顶点的度
     */
    int degree(int v);

    /**
     * 验证V点是否合法
     * @param v 顶点V
     */
    void validateVertex(int v);
}
